<?php

namespace app\api\controller;

use app\common\controller\Api;
use think\Db;
use app\api\model\Redpacket;

/**
 * 示例接口
 */
class Lottery extends Api
{

    //如果$noNeedLogin为空表示所有接口都需要登录才能请求
    //如果$noNeedRight为空表示所有接口都需要验证权限才能请求
    //如果接口已经设置无需登录,那也就无需鉴权了
    //
    // 无需登录的接口,*表示全部
    // protected $noNeedLogin = [];
    // 无需鉴权的接口,*表示全部
    protected $noNeedRight = ['*'];

    /**
     * 抽奖主接口
     * @param int $type 操作类型：0-获取信息，1-执行抽奖
     * @return \think\Json
     */
    public function index($type = 0)
    {
        $user = $this->auth->getUser();

        // 根据type处理
        if ($type == 0) {
            // 获取抽奖信息
            return $this->getLotteryInfo($user);
        } elseif ($type == 1) {
            // 执行抽奖
            return $this->doLottery($user);
        } else {
            return json(['Type' => 2, 'Amount' => 0, 'Count' => 0, 'Desc' => '参数错误']);
        }
    }

    /**
     * 获取用户抽奖信息
     */
    private function getLotteryInfo($user)
    {
        return json([
            'Type' => 0,
            'Amount' => $user->lottery_total,
            'Count' => $user->lottery_count,
            'Desc' => '总金额'
        ]);
    }

    /**
     * 执行抽奖
     */
    private function doLottery($user)
    {
        // dump($user);
        // 使用事务确保数据一致性
        Db::startTrans();
        try {
            // 检查抽奖次数
            if ($user->lottery_count <= 0) {
                Db::rollback();
                return json([
                    'Type' => 2,
                    'Amount' => 0,
                    'Count' => 0,
                    'Desc' => '次数用完了'
                ]);
            }

            // 减少抽奖次数
            $user->lottery_count -= 1;

            // 模拟抽奖：10%中奖率
            $isWin = mt_rand(1, 10) == 1;
            $amount = 0;
            $desc = '';

            if ($isWin) {
                // 中奖金额：1-10元随机
                $amount = mt_rand(100, 1000) / 100; // 转换为浮点数，保留两位小数

                // 记录红包
                $redpacket = new Redpacket();
                $redpacket->save([
                    'user_id' => $user->id,
                    'amount' => $amount,
                    'createtime' => date('Y-m-d H:i:s')
                ]);

                $user->lottery_total += $amount;
                $desc = '抽到奖了，金额：' . $amount . '元';
            } else {
                $desc = '未抽到奖';
            }

            // 保存用户信息
            $user->save();

            Db::commit();
            return json([
                'Type' => 1,
                'Amount' => $amount,
                'Count' => $user->lottery_count,
                'Desc' => $desc
            ]);
        } catch (\Exception $e) {
            Db::rollback();
            return json(['Type' => 2, 'Amount' => 0, 'Count' => 0, 'Desc' => '抽奖失败：' . $e->getMessage()]);
        }
    }

    /**
     * 获取抽奖历史
     */
    public function history()
    {
        $user = $this->auth->getUser();

        $redpacket = new Redpacket();
        $history = $redpacket->where('user_id', $user->id)
            ->order('createtime DESC')
            ->select();
        $this->success('获取成功', $history);
    }
}
